<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="zh" xml:lang="zh" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Guideline: 实现中的重要决策</title>
<meta name="uma.type" content="Guideline">
<meta name="uma.name" content="important_decisions_in_implementation">
<meta name="uma.presentationName" content="实现中的重要决策">
<meta name="element_type" content="other">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../../css/default.css" type="text/css">
<script src="./../../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var backPath = './../../../';
					var imgPath = './../../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo,  '', false, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top"><a name="Top"></a>
<div id="page-guid" value="1.0139590031965295E-304"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Guideline: 实现中的重要决策</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../../images/guidance.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">本指南为规划实现活动提供路线图。</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Related Elements</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../../rup/tasks/develop_development_case_B10E3391.html" guid="{F6999E01-701F-4D48-9E83-A063CB35912B}">Develop Development Case</a>
</li>
<li>
<a href="./../../../rup/disciplines/rup_implementation_discipline_263E22DB.html" guid="_yd3ExNnmEdmO6L4XMImrsA">实现</a>
</li>
<li>
<a href="./../../../rup/domains/implementation_442FA5B0.html" guid="_M6RHkN7IEdm8G6yT7-Wdqw">实现</a>
</li>
<li>
<a href="./../../../rup/capabilitypatterns/implementation_8FF0AAD4.html" guid="{F2AD342D-0F3B-4E19-A351-75ECDCB806F5}">实现</a>
</li>
<li>
<a href="./../../../rup/tasks/tailor_process_for_project_6CFD05E2.html" guid="{1BA9AAA0-DA89-4C14-B45A-CE28A8A10894}">为项目定制开发流程</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Main Description</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><a id="Top" name="Top"></a> 
<h3>
    <a id="Decide How to Use Artifacts" name="Decide How to Use Artifacts">决定如何使用工作产品</a>
</h3>
<p>
    决定要使用哪些工作产品以及如何使用每个工作产品。下表描述您必须拥有的工作产品以及在某些情况下使用的工作产品。关于如何定制每个工作产品的更多详细信息，以及有关该特定工作产品的优缺点的讨论，请阅读每个工作产品的标题为“定制”的部分。
</p>
<p>
    对于每个工作产品，决定应如何使用工作产品：必须拥有、应该拥有、可以拥有或不能拥有。关于更多详细信息，请参阅<a class="elementLinkWithUserText" href="./../../../rup/guidances/guidelines/classifying_work_products_4250A298.html" guid="7.27749388241665E-306">技术：将工作产品分类</a>。
</p>
<div align="center">
    <table     style="BORDER-RIGHT: rgb(128,128,128) 1px solid; BORDER-TOP: rgb(128,128,128) 1px solid; BORDER-LEFT: rgb(128,128,128) 1px solid; BORDER-BOTTOM: rgb(128,128,128) 1px solid"      cellspacing="0" bordercolordark="#808080" cellpadding="4" width="85%" bordercolorlight="#808080" border="1">
        <tbody>
            <tr>
                <th scope="col" width="20%">
                    工作产品
                </th>
                <th scope="col" width="40%">
                    <b>用途</b>
                </th>
                <th scope="col" width="40%">
                    <p>
                        <b>定制（可选，建议使用）</b>
                    </p>
                </th>
            </tr>
            <tr>
                <td width="20%">
                    <p>
                        <a class="elementLink" href="./../../../rup/workproducts/rup_implementation_model_5858DB65.html" guid="{157E9B67-C619-410D-A927-F2CD217BF8FE}">实现模型</a>
                    </p>
                    <blockquote>
                        <p>
                            （<a class="elementLink" href="./../../../rup/workproducts/rup_implementation_subsystem_118747E9.html" guid="{0F629848-C19E-49AB-A6C1-C8D6A094898A}">实现子系统</a>，<a class="elementLink" href="./../../../rup/workproducts/rup_implementation_element_49BB163E.html" guid="{E1E0DDA3-914F-4CC1-9D0A-ED4B8E8BBA89}">实现元素</a>）
                        </p>
                    </blockquote>
                </td>
                <td width="40%">
                    <p>
                        实现模型是指在运行时环境中构建和管理系统所需要的源代码、可执行程序和所有其他工作产品。
                    </p>
                    <p>
                        实现由实现元素组成，包括代码（源、二进制文件和可执行程序）和包含信息的文件（例如启动文件或自述文件）。
                    </p>
                    <p>
                        实现子系统是实现元素和其他实现子系统的集合，用来将实现模型分成几个较小的部分来进行构造。
                    </p>
                </td>
                <td width="40%">
                    <p>
                        所有软件项目都有一个实现模型，实现模型所具有的实现元素至少包括一些源代码和可执行程序。
                    </p>
                    <p>
                        有些项目还包括子系统、库和可视化模型。
                    </p>
                    <p>
                        如果要组织大量的实现元素，那么子系统就有用了。
                    </p>
                </td>
            </tr>
            <tr>
                <td width="20%">
                    <a class="elementLink" href="./../../../rup/workproducts/rup_integration_build_plan_31CE4B79.html" guid="{FA56B557-857D-4122-8E60-7A4A84418EB1}">集成构建计划</a>
                </td>
                <td width="40%">
                    定义组件的实现顺序、集成系统时要创建的工作版本以及它们的评估方式。<br />
                </td>
                <td width="40%">
                    <p>
                        可选。
                    </p>
                    <p>
                        如果需要计划集成，则建议使用。只有在集成不重要时才省略它。
                    </p>
                </td>
            </tr>
        </tbody>
    </table><br />
</div>
<p>
    根据项目的需要定制每个工作产品。关于定制注意事项，请参阅工作产品的描述页的定制部分，或<a class="elementLinkWithType" href="./../../../rup/tasks/develop_development_case_B10E3391.html" guid="{F6999E01-701F-4D48-9E83-A063CB35912B}">Task: Develop Development Case</a>中的标题“按照规程定制工作产品”下描述的步骤。
</p>
<h3>
    <a id="Decide Unit Test Coverage" name="Decide Unit Test Coverage">决定单元测试覆盖</a>
</h3>
<p>
    决定执行单元测试的程度以及代码覆盖的级别，它的规模可从非正式的一直到 100% 的代码覆盖。 此规模在<a class="elementLink" href="./../../../rup/workproducts/rup_test_plan_53712941.html" guid="{B95CA9FA-A00E-4C6C-AA16-133297812CC0}">测试计划</a>中有所描述。
</p>
<p>
    单元测试覆盖级别常常受集成和系统测试人员（代码移交给这些测试人员）需要的驱动。系统测试人员的工作取决于代码的质量。 如果代码的缺陷过多，集成和系统测试人员就会过于频繁地将代码发回给实现者。
    这是开发流程欠佳的信号，其解决方案可能就是要求实现者进行更彻底的单元测试。
</p>
<p>
    当然，您不能期望经过单元测试的代码完全没有缺陷。不过，您需要在单元测试和质量之间找到一个“稳健的”平衡。
</p>
<p>
    单元测试覆盖的级别在不同阶段之间也可能不同。即使是在构造和移交阶段需要 100% 代码覆盖的安全关键项目，通常在精化阶段也不需要这样，因为在该阶段有许多类只是部分实现。
</p>
<h3>
    <a id="Decide How to Review Code" name="Decide How to Review Code">决定如何评审代码</a>
</h3>
<p>
    决定代码的评审程度。&nbsp;
</p>
<p>
    代码评审的优点有：
</p>
<ul>
    <li>
        强迫和鼓励在项目中使用共同的编码风格。代码评审是一种使项目成员遵循编程指南的有效方式。为确保这一点，评审所有作者和实现者的结果比评审所有源代码文件更显重要。
    </li>
    <li>
        查找自动化测试未能发现的错误。代码评审可发现在测试中未遇到的错误。
    </li>
    <li>
        在个人之间共享知识，以及将知识从更有经验的人传递到经验较少的人。
    </li>
</ul>
<p>
    代码评审的缺点有：
</p>
<ul>
    <li>
        它会耗费时间和资源。
    </li>
    <li>
        如果执行不当，则可能缺乏效率。存在这样一种危险：即认为之所以进行代码评审，“是因为我们必须这样做”，而不是将其作为自动测试的有效补充。
    </li>
</ul>
<p>
    关于代码评审的更多信息，另请参阅<a class="elementLinkWithType" href="./../../../rup/tasks/review_code_27AD7580.html" guid="{9EC0DF69-EEE1-4B41-8F48-9FB6B0DB7F72}">Task: 评审代码</a>。
</p>
<p>
    代码评审对项目有着重要的意义。所有开始度量代码评审相关错误和维护问题级别的项目，均称它们因为评审而提高了绩效。 然而，在许多组织中，代码评审却由于以下几个原因而很难“展开”：
</p>
<ul>
    <li>
        未收集足够数据来验证代码评审是否实际起作用。
    </li>
    <li>
        收集的数据过多。
    </li>
    <li>
        实现者对他们的代码的防护意识过强。
    </li>
    <li>
        评审陷入形式上的困境。
    </li>
    <li>
        管理评审事宜耗费过多的工作。
    </li>
</ul>
<p>
    请记住以下几点，以尽可能充分利用代码评审：
</p>
<ul>
    <li>
        只收集适量的数据。
    </li>
    <li>
        度量评审的成绩，并显示结果。
    </li>
    <li>
        以“简洁”的方式使用评审。
    </li>
</ul><br />
<br /></td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright">Copyright &copy; 2008 版权所有 东软集团股份有限公司&nbsp; 联系邮箱:<a href="mailto:tcoe@neusoft.com">tcoe@neusoft.com</a></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script type="text/javascript" language="JavaScript">
				contentPage.onload();
			</script>
</html>
